/**
 * \addtogroup Opticalmouse Optical Mouse API
 * @{  
 *  This file specifies the Samsung Optical Mouse API for Windows Mobile devices.
 *
 *  This optical mouse API functions allow the programmer to set and get the 
 *  optical mouse operation mode and mouse speed.
 *
 * Copyright &copy; 2009 Samsung Electronics
 *   
 * File: smiOpticalMouse.h
 */

#ifndef _SMIOPTICALMOUSE_H_
#define _SMIOPTICALMOUSE_H_

#include <smiSDK.h>

/**
*  Specifies the operation mode of the optical mouse.
*/
typedef enum 
{
	SMI_OPTICAL_MOUSE_MODE_CURSOR  , 
	SMI_OPTICAL_MOUSE_MODE_NAVIGATION, 
}SmiOpticalMouseMode;

/**
*  Specifies the mouse speed in cursor mode.
*/
typedef enum 
{
	SMI_OPTICAL_MOUSE_SPEED_SLOW   , 
	SMI_OPTICAL_MOUSE_SPEED_NORMAL , 
	SMI_OPTICAL_MOUSE_SPEED_FAST   , 
}SmiOpticalMouseSpeed;

/**
*  Specifies the optical mouse capabilities.
*/
typedef struct  
{
	BOOL multiOperationModeIsSupported;
	BOOL speedChangeIsSupported;
}SmiOpticalMouseCapabilities;

/**
 *  Gets optical mouse capabilities.
 *
 *  @param	capabilities [out]	A pointer to the capabilities of the device.  
 *
 *  @return 
 *  							SMI_SUCCESS on success
 *  \n							SMI_ERROR_INVALID_PARAMETER if the input parameter is NULL
 *  \n							SMI_ERROR_DEVICE_NOT_FOUND if an optical mouse is not found            
 *
 */
SMI_API SMI_RESULT SmiOpticalMouseGetCapabilities(SmiOpticalMouseCapabilities *capabilities);

/**
 *  Sets the optical mouse operation mode.
 *
 *  @param	   mode [in]		Desired mouse operation mode.
 *
 *  @return 
 *  							SMI_SUCCESS on success
 *  \n							SMI_ERROR_INVALID_PARAMETER if the input parameter is invalid
 *  \n							SMI_ERROR_DEVICE_NOT_FOUND if an optical mouse is not found            
 */
SMI_API SMI_RESULT SmiOpticalMouseSetMode(SmiOpticalMouseMode mode);

/**
 *  Gets the optical mouse operation mode.
 *
 *  @param	mode [in]			A pointer to the optical mouse operation mode.  
 *
 *  @return 
 *								SMI_SUCCESS on success
 *  \n							SMI_ERROR_INVALID_PARAMETER if the input parameter is NULL
 *  \n							SMI_ERROR_DEVICE_NOT_FOUND if an optical mouse is not found            
*/
SMI_API SMI_RESULT SmiOpticalMouseGetMode(SmiOpticalMouseMode* mode);

/**
 *  Sets the Optical mouse speed in cursor mode.
 *
 *  @param	   speed [in]		Desired mouse speed.
 *
 *  @return 
 *  							SMI_SUCCESS on success
 *  \n							SMI_ERROR_INVALID_PARAMETER if the input parameter is invalid
 *  \n							SMI_ERROR_DEVICE_NOT_FOUND if an optical mouse is not found            
 */
SMI_API SMI_RESULT SmiOpticalMouseSetSpeed(SmiOpticalMouseSpeed speed);

/**
 *  Gets the optical mouse speed.
 *
 *  @param	speed [in]			A pointer to the optical mouse speed.  
 *
 *  @return 
 *  							SMI_SUCCESS on success
 *  \n							SMI_ERROR_INVALID_PARAMETER if the input parameter is NULL
 *  \n							SMI_ERROR_DEVICE_NOT_FOUND if an optical mouse is not found            
 */
SMI_API SMI_RESULT SmiOpticalMouseGetSpeed(SmiOpticalMouseSpeed *speed);

#endif // #_SMIOPTICALMOUSE_H_
/* @} */